<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>

    function Foo() {
        getName = function () {
            console.log (1)
        }
        return this
    }

    Foo.getName = function () {
        console.log (2);
    }

    Foo.prototype.getName = function () {
        console.log (3)
    }


    var getName = function () {
        console.log(4)
    }

    function getName() {
        console.log (5)
    }


    Foo.getName() // 2
    getName()  // 4
    Foo().getName() // 1  注意这个在浏览器window环境才有，node环境没有，重新对getName赋值了
    getName() // 1
    new Foo.getName() // 2  点（.）的优先级高于new操作,相当于new (Foo.getName)()
    new Foo().getName() // 3  相当于 运算符优先级括号高于new，实际执行为(new Foo()).getName()
    new new Foo().getName() // 3  相当于 new ((new Foo()).getName)()
</script>
</html>